プログラムを書くためにやってること
概要
流行ってるので。
http://cside.hatenablog.com/entry/2014/05/19/021253
http://qiita.com/voluntas/items/f8eceda58f1bdfd33905
といいつつ俺のはポエムです。
記憶しなければいけないことを減らす
忘れてもいいように、情報は「それが必要になる箇所にできるだけ残す」ことにしてる。
情報とその情報が必要な物事の間に距離とか時差とかがあると、その間が原因で情報が無駄になる。
減らす効能として、次がある。
・覚えておくべき事が少なくできる = 無駄な努力の削減ができる
・一度に複数のことに関わっても何してたか思い出すロスが減る(そもそも覚えてない確信がある
ルールを作って毎回悩んでいる物事を減らす
たとえばメモを残すときに、タイトルについて悩む事は無いだろうか。
自分はあって、毎回あって、面倒くさくなったので、一貫性と時事性を求めて、 2014/05/20 22:59:11 とかタイムスタンプを使う。
ショートカットにしておくと楽。
毎回悩む事を減らすと、その悩みが永遠に消える。
また、メモのフォーマットを決めたりすると、これまた悩み事が減る。
覚えてられなければ覚えてられる範囲のルールを策定すれば良い。
100%誰かの為のものは作らない
最低でも自分のために%が割り当てられるものを作る。
誰かのため、だと、自分がその誰かのニーズを見誤っている場合、即ゴミが完成する。
完成してもゴミ。ツラい。
また、最低でも自分がニーズの一翼を持った方が、「ああ、このニーズとこの労働は割にあわないな」とかなって、諦められて良い。
価値を生まないものを作り上げることに価値はない。
作って使って利益を得る事に価値がある。
自己満足ならそれはそれで。
習慣を作る
作れる。試して長続きすればそれはもう習慣。
長続きしなかったらアレンジして試す。
自分のケツを蹴る方法を習慣にする
例えばタイマーをセットして時間に追われるごっこしたり、
何でも良いけど、自分を急がせる手法を用意しておくと捗る。
捗らなくても手が打てる。
自動的に禁止する
自動化の最も良いところは、何度自分がルール違反をしても、飽きる事無く注意してくれるところ。
人だと飽きちゃう。あきれ(られ)てしまう。
また、ルールは自動的に守れるようにしておくと楽。
選択肢を増やす
今までやってない事を試し、選択肢を増やす。
一辺倒になると硬化/老化してヤバい。
トンカチを持ったら全てが釘に見える、みたいなのを避けるには、工具をいっぱい用意すれば良いと思う。
今まで単なる釘に見えてたものが、何かを知った事で違った見え方になることを期待する。
そうやって増やした選択肢の結果で、
全然関係ない物事が考え方に影響を与えたり、人と会わせてくれたりする。
コードを書く時には、選択肢を多く持っておく事は、文脈を実現する手段として使える。これは例えば次の話。
いろんな疎結合をデザインに利用する
いろんな疎結合を組み合わせることで、意図を表象したりできる。
例えばなんらかのアプリケーションを作ったとき、
コード外とコード内にはそれぞれ別の種類の疎結合が有り得ると思う。
コード外の世界が持つ疎結合の特性と、コード内の世界が持つ疎結合の特性は大きく異なる。
コード外での疎結合というと、
ありもののプロトコルで繋ぐとか、ファイルで読むとか、プロセスを繋ぐとか。
一般性が高く、なんらかの方法で結合の手段の明示が必要なものら。
コード外での構成に使える手段はめっちゃ多いが、多用しすぎると誰にも解らないパーツ群になってしまう。
主に明示性、凝集性、あとで見てワンセットに見えるかどうか、Purgableに見えるかどうか。
(これらを結びつけられるのはドキュメントだけだ。ドキュメントの「まとめる力」がどれだけ強いか、知ってる人は無茶はしないと思いたい。)
コード内では、疎結合の手法とバリエーションによって「パーツ単位」や「考え方」の単位を、あとからコードとかAPI見た人に、より強くアピールする事が出来る。
手段を明示的に使い分けることで、コードに文脈を与えられる。
特に手段が多い言語とかで楽。
ただし、パターンに見せるためには、パターンに見せられるだけのプレゼンテーションが必要。
4種類の柄を使って着物デザインしました、って言っても、相手に近過ぎたら1種類にしか見せられない。
どうやって一歩ひかせて俯瞰させるか、みたいなのもデザイン。
部分あるいは全体で捨てられるようにする
疎結合性はこのための条件。
固執するのは良くない。いろいろ試して、「あ、こっちのほうがいいや、これもういらねーや」ってなったら捨てようと思ってる。
疎結合での切り口がうまくマッチすれば、もしかしたら再利用できるかもしれない。
捨てられないものは腐る。ゴミは捨てれば良い。
身軽さを保つ
環境を移動するときに、毎回持ち歩かなければいけない重い荷物が多かったりしない?
それって結構邪魔じゃない? みたいな思考で、
・頻繁に使わないツールは入れない
・使わなくなったツールは捨てる
・デフォルトで使って動作が良いツールを使う
などを守ると、あとはDropboxの2GBに入るだけの質量のデータと、Githubとかが有ればOKなのでは。
もっといい制約を探す
最高の制約は、最高のゲームになる。
懲りずに改良するとしたら、制約の部分が良いと思う。